#ifndef BATT_STACK_H
#define BATT_STACK_H

#include <QtCore>

#include "ComDefine.h"
#include "Alarm.h"

//电池堆数据
class CBattStack
{
public:
    //获取英文名称(主要供调试用)
    QString GetNameOfStackState();
    //获取电池堆状态的中文utf8(主要供界面显示)
    QString GetUtf8OfStackState();

    //是不是禁止状态
    bool IsForbidOfStackState();
    //是不是禁充状态
    bool IsForbidChargeOfStackState();
    //是不是禁访状态
    bool IsForbidDischargeOfStackState();
    //是不是告警状态
    bool IsAlarmOfStackState();
    //是不是故障状态
    bool IsFaultOfStackState();
    //是不是正常状态
    bool IsNormalOfStackState();

    //是不是选中了访客
    bool IsSelectViewer();
    //是不是选中了操作员
    bool IsSelectOperator();
    //是不是选中了工程师
    bool IsSelectEngineer();
    //选中访客
    void SelectViewer();
    //选中操作员
    void SelectOperator();
    //选中工程师
    void SelectEngineer();
    //获取用户的中文utf8(主要供界面显示)
    QString GetUtf8OfUser();

    //是不是英文界面
    bool IsEnglishUi();
    //是不是中文界面
    bool IsChineseUi();
    //设置语言为英文
    void SetToEnglishUi();
    //设置语言为中文
    void SetToChineseUi();

    QString GetRtdbVersion();

    //分配主辅采集的电池簇组数量
    void AssignDac();

    void InitCycleTimes();

    //检查报警参数等级
    void CheckAlarmParamLevel();
    void CheckAlarmSaveLevel();

    bool IsStackVolValid();
    bool IsStackVolInvalid();
    bool IsStackCurValid();
    bool IsStackCurInvalid();
    bool IsStackSocValid();
    bool IsStackSocInvalid();
    bool IsStackSohValid();
    bool IsStackSohInvalid();

    QDateTime GetTimeBranCurAbno(int iIndex);
    void SetTimeBranCurAbno(int iIndex, const QDateTime& dt);
	
public:
    quint16 usStackState;                   // 电池堆状态                        1           0x1111禁充 0x2222禁放 0x5555告警 0xAAAA故障 0xBBBB正常
    quint16 usInstallBankNum;               // 安装电池组数                      2
    quint16 usBankNumInStack;               // 电池堆管辖电池组数                3
    quint16 usStackCfgInfo;                 // 电池堆配置信息					 4	         各电池组是否投入运行
    quint16 usMaxBankSocNo;                 // 组SOC最大组号                     5
    quint16 usMinBankSocNo;                 // 组SOC最小组号                     6
    quint16 usMaxBankVolNo;                 // 组电压最大组号                    7
    quint16 usMinBankVolNo;                 // 组电压最小组号                    8
    quint16 usSglMaxVolBankNo;              // 最高单体电压电池组号              9
    quint16 usSglMaxVolNoInBank;            // 最高电压电池所在组的组内编号      10
    quint16 usSglMinVolBankNo;              // 最低单体电压电池组号              11
    quint16 usSglMinVolNoInBank;            // 最低电压电池所在组的组内编号      12
    quint16 usSglMaxTempBankNo;             // 最高电池温度电池组号              13
    quint16 usSglMaxTempNoInBank;           // 最高电池温度所在组的组内编号      14
    quint16 usSglMinTempBankNo;             // 最低电池温度电池组号              15
    quint16 usSglMinTempNoInBank;           // 最低电池温度所在组的组内编号      16
    quint16	usDI1;				            // 开关量输入-DI1		             17       1--交流正常， 0--交流失电
    quint16	usDI2; 	                        // 开关量输入-DI2                 18       1--闭合，     0--断开
    quint16	usDI3; 	                        // 开关量输入-DI3                 19
    quint16	usDI4; 	                        // 开关量输入-DI4	             20
    quint16	usDI5; 	                        // 开关量输入-DI5	             21
    quint16	usDI6; 	                        // 开关量输入-DI6	             22
    quint16	usDI7; 	                        // 开关量输入-DI7	             23
    quint16	usDI8; 	                        // 开关量输入-DI8	             24
    quint16	usDI9; 	                        // 开关量输入-DI9	             25
    quint16	usDI10;                         // 开关量输入-DI10                26
    quint16	usDI11;                         // 开关量输入-DI11                27
    quint16	usDI12;                         // 开关量输入-DI12                28
    quint16	usDI13;                         // 开关量输入-DI13                29
    quint16	usDI14;                         // 开关量输入-DI14                30
    quint16	usDI15;                         // 开关量输入-DI15                31
    quint16	usDI16;                         // 开关量输入-DI16                32
    quint16 usStackTemp[18];                // 33 - 50   
				// usStackTemp[0]: DI状态
				// usStackTemp[1]: DI状态
				// usStackTemp[2]: 动环告警字1
				// usStackTemp[3]: 动环告警字2
				// usStackTemp[4]: 动环告警字3
				// usStackTemp[17]: EMS控制的合闸分闸命令, 1-上电, 2-下电

    float fStackVol;                        // 电池堆电压                        51
    float fStackCur; 	                    // 电池堆电流                        53
    float fStackPower;                      // 电池堆功率
    float fStackInsuRes;                    // 系统绝缘
    float fStackSoc;                        // 电池堆SOC                         55
    float fStackSoh; 	                    // 电池堆SOH                         57
    float fStackChargeEQ; 	                // 电池堆可充电量                    59
    float fStackDischargeEQ;                // 电池堆可放电量                    61
    float fStackSglChargeEQ;                // 电池堆单次充电电量                63
    float fStackSglDischargeEQ;             // 电池堆单次放电电量                65
    double dblStackChargeEQAdd;             // 电池堆充电量累加值                67
    double dblStackDischargeEQAdd; 	        // 电池堆放电量累加值                69
    float fStackSglChargeAh;                // 电池堆单次充电容量
    float fStackSglDischargeAh;             // 电池堆单次放电容量
    double dblStackChargeAhAdd;             // 电池堆充容量累加值
    double dblStackDischargeAhAdd; 	        // 电池堆放容量累加值
    float fSglVolDiffInStack;               // 单体电压压差极差值	             71
    float fSglMaxVolInStack;                // 最高单体电压   		             73
    float fSglMinVolInStack;                // 最低单体电压                      75
    float fSglTempDiffInStack;              // 电池温度温差极差值	             77
    float fSglMaxTempInStack;               // 最高电池温度                      79
    float fSglMinTempInStack;               // 最低电池温度                      81
    float fBankSocDiff;                     // 组SOC差极差值	                 83
    float fBankSocMax;                      // 组SOC最大                         85
    float fBankSocMin;                      // 组SOC最小                         87
    float fBankVolDiff;                     // 组电压差极差值	                 89
    float fBankVolMax;                      // 组电压最大                        91
    float fBankVolMin;                      // 组电压最小                        93
    float fStackAllowMaxChargePower;        // 电池堆当前允许最大充电功率        95
    float fStackAllowMaxDischargePower;     // 电池堆当前允许最大放电功率        97
    float fStackAllowMaxChargeCurrent;      // 电池堆当前允许最大充电电流        99
    float fStackAllowMaxDischargeCurrent;   // 电池堆当前允许最大放电电流        101
    float fStackTemp[49];                   // 103 - 200

    quint16 usMaxBankCurNo;                 // 组电流最大组号
    quint16 usMinBankCurNo;                 // 组电流最小组号
    float fBankCurDiff;                     // 组电流差极差值
    float fBankCurMax;                      // 组电流最大
    float fBankCurMin;                      // 组电流最小

    // 离散输入寄存器
    char aEmerStop;                         // 紧急停机:0正常,1急停.默认为0
    char aFireDataSource;                   // 消防数据来源，0未知,1通讯采集,2DI反馈
    char aFireDiNo;                         // 消防的DI反馈的DI序号
    char aFireWarn;                         // 消防预警:0正常,1预警.默认为0
    char aFireAction;                       // 消防启动:0正常,1启动.默认为0
    char aFireFault;                        // 消防故障:0正常,1故障.默认为0
    char aLcDataSource;                     // 液冷数据来源，0未知,1通讯采集,2DI反馈
    char aLcDiNo;                           // 液冷的DI反馈的DI序号
    char aAcDataSource;                     // 空调数据来源，0未知,1通讯采集,2DI反馈
    char aAcDiNo;                           // 空调的DI反馈的DI序号
    char aWaterDataSource;                  // 水浸数据来源，0未知,1通讯采集,2DI反馈
    char aWaterDiNo;                        // 水浸的DI反馈的DI序号
    char aWaterAlarm;                       // 水浸告警:0正常,1告警.默认为0
    char aGasDiNo;                          // 可燃气体的DI反馈的DI序号
    char aGasAlarm;                         // 可燃气体:0正常,1告警.默认为0
    char aDoorDiNo;                         // 门禁的DI反馈的DI序号
    char aAcceCtrlState;                    // 门禁状态:0正常,1告警.默认为0
    char aPcsDiNo;                          // PCS的DI反馈的DI序号
    char aPCSCommFault;                     // PCS通讯故障:0正常,1故障.默认为0
    char aEMSCommFault;                     // EMS通讯故障:0正常,1故障.默认为0
    char aConSwitchDiNo;                    // 汇流开关的DI反馈的DI序号
    char aConfSwitchState;                  // 汇流开关反馈:0正常,1闭合.默认为0
    char aExIOModuConnFault;   	            // 扩展IO模块通讯故障:0正常,1故障.默认为0
    char aStackTemp[50];                    // 1 - 50//数组10用来判断CAN是否启动；

    // 版本信息
    quint16 usBMSUpgradeState;              // BMS升级状态  8001
    quint16 usBaVersMajor;                  // BAMS主版本   8002
    quint16 usBaVersMinor;                  //              8003
    quint16 usBaVersRevision;               //              8004
    quint16 usCompVers1;                    // 组件版本     8005
    quint16 usCompVers2;                    //              8006
    quint16 usCompVers3;                    //              8007
    quint16 usCompVers4;                    //              8008
    quint16 usCompVers5;                    //              8009
    quint16 usCompVers6;                    //              8010
    uchar uaBCVersMajor1;                   // BC主板本号   8011
    uchar uaBCVersMajor2;                   //              8012
    uchar uaBCVersMinor1;                   // BC次板本号   8013
    uchar uaBCVersMinor2;                   //              8014
    uchar uaBCBootVers1;                    // BC Boot版本  8015
    uchar uaBCBootVers2;                    //              8016
    uchar uaBMUVers1;                       // BMU版本号    8017
    uchar uaBMUVers2;                       //              8018

    // 动环信息
    char aACCommFault[MAX_AC_NUM];	        // 空调通讯故障
    char aACState[MAX_AC_NUM];	            // 空调运行状态
    char aTHCommFault[MAX_TEMP_HUMI_NUM];   // 温湿度通讯故障
    char aEnvWaterAlarm[MAX_WATER_NUM];     // 水浸告警
    char aEnvTemp[50];                      // 动环开关量

    float fACTemp[MAX_AC_NUM];              // 空调温度
    float fACHumi[MAX_AC_NUM];              // 空调温度
    float fTHTemp[MAX_TEMP_HUMI_NUM];       // 温湿度温度
    float fTHHumi[MAX_TEMP_HUMI_NUM];       // 温湿度湿度
    float fEnvTemp[50];                     // 动环模拟量

    // 内部使用测点	                        // Modbus 寄存器地址从 1000 开始
    quint16 usBankStateSum;                 // 各组状态汇总   0 - 无  0x0001 - 充满  0x0002 - 放空
    quint16 usVersIncomp;                   // 版本不兼容     0 - 版本兼容   1 - 版本不兼容
    uchar uaRtdbVersMajor;                  // rtdb1版本
    uchar uaRtdbVersMinor;                  // rtdb2版本
    uchar uaRtdbVersRevision;               // rtdb3版本

    uchar uaRtdbVers;                       //xnrtdb    版本
    uchar uaBa10Vers;                       //BA10      版本
    uchar uaBa7Vers;                        //BA7       版本
    uchar uaMqttVers;                       //xnmqtt    版本
    uchar uaDacNetVers;                     //xndacnet  版本
    uchar uaDacSrvVers;                     // xndacsrv  版本
    uchar uaDacAssVers;                     // xndacass  版本
    uchar uaProcSrvVers;                    // xnprocsrv 版本
    uchar uaTranSrvVers;                    // xntransrv 版本
    uchar uaStatSrvVers;                    //xnstatsrv版本
    uchar uaViewVers;                       // xnview 版本
    uchar uaPlatVers;                       // xnplat 版本
    uchar uaTimeVers;                       //xntime    对时服务的版本
    uchar uaSgVers;                         //xnsgsrv 策略程序的版本
    uchar uaIoVers;                         //xnio
    uchar uaBmsIoVers;                      //xnbmsio
    uchar uaEmsIoVers;                      //xnemsio
    uchar uaTtys0Vers;                      //xnttys0
    uchar uaTtys1Vers;                      //xnttys1
    uchar uaTtys2Vers;                      //xnttys2
    uchar uaTtys3Vers;                      //xnttys3
    uchar uaTtys4Vers;                      //xnttys4
    uchar uaTtys5Vers;                      //xnttys5
    uchar uaTtys6Vers;                      //xnttys6
    uchar uaTtys7Vers;                      //xnttys7
    uchar uaTtys8Vers;                      //xnttys8
    uchar uaTtys9Vers;                      //xnttys9
    uchar uaCan0Vers;                       //xncan0
    uchar uaCan1Vers;                       //xncan1
    uchar uaCan2Vers;                       //xncan2
    uchar uaCan3Vers;                       //xncan3
    uchar uaTcp2RtuVers;                    //xntcp2rtu
    uchar uaRev1Vers;                       //预留程序1
    uchar uaRev2Vers;                       //预留程序2
    uchar uaRev3Vers;                       //预留程序3
    uchar uaRev4Vers;                       //预留程序4
    uchar uaRev5Vers;                       //预留程序5
    uchar uaRev6Vers;                       //预留程序6
    uchar uaRev7Vers;                       //预留程序7
    uchar uaRev8Vers;                       //预留程序8
    uchar uaRev9Vers;                       //预留程序9
    uchar uaRev10Vers;                      //预留程序10

    uchar uaKgSaveCsvVers;                  // kgsavecsv 版本
    uchar uaSaveSrvVers;                    // xnsavesrv 版本
    uchar uaPCSSrvVers;                     // PCS       PCS通讯
    uchar uaExIOVers;                       // ExIO      扩展IO模块
    uchar uaACVers;                         // AC        空调温湿度
    uchar ua104Vers;                        // 104       IEC104通讯
    uchar ua61850Vers;                      // 61850     IEC61850通讯

    quint16 usACStrategy;                   // 动环配置 - 空调策略   0 - 无配置 1 - 英维克 2 - 黑盾 3 - 盖鼎 4 - 同飞
    quint16	usACCommSerialPortNo;           // 串口号

    quint16 usTHStrategy;                   // 动环配置 - 温湿度策略 0 - 无配置 1 - 仁科
    quint16	usTHCommSerialPortNo;           // 串口号

    //系统中的各类动环的当前使用数量
    quint16 usAcNum;                    //空调数
    quint16 usThNum;                    //温湿度数
    quint16 usWaterNum;                 //水浸数
    quint16 usDiNum;                    //DI数
    quint16 usDoNum;                    //DO数
    quint16 usMeterNum;                 //电表数
    quint16 usDhNum;                    //除湿数
    quint16 usLcNum;                    //液冷数
    quint16 usPcsNum;                   //PCS逆变器数
    quint16 usDcdcNum;                  //DCDC数
    quint16 usDoorNum;                  //门禁数
    quint16 usEcNum;                    //环控数
    quint16 usFireNum;                  //消防数
    quint16 usPvNum;                    //光伏数
    quint16 usEsNum;                    //急停数
    quint16 usUpsNum;                   //UPS数
    quint16 usLedNum;                   //LED数
    quint16 usFanNum;                   //风扇数
    quint16 usStsNum;                   //STS数
    quint16 usPressNum;                 //压力传感器数
    quint16 usLevelNum;                 //液位传感器数
    quint16 usGasNum;                   //可燃气体数
    quint16 usPileNum;                  //充电桩数
    quint16 usDevNum1;                  //预留设备数1
    quint16 usDevNum2;                  //预留设备数2
    quint16 usDevNum3;                  //预留设备数3
    quint16 usDevNum4;                  //预留设备数4
    quint16 usDevNum5;                  //预留设备数5

    quint16 usAlarmParamLevel;          //告警参数等级:3为三级告警(预警/告警/保护),4为四级告警(提示/预警/告警/保护)
    quint16 usAlarmSaveLevel;           //报警保存等级:0保存所有等级;1只保存预警、告警和保护;2只保存告警和保护;3只保存保护

    quint16	usLastDI1;                      // 上一次 BAMS DI
    quint16	usLastDI2;
    quint16	usLastDI3;
    quint16	usLastDI4;

    quint16 usDO1State;                     // 干接点1状态
    quint16 usDO2State;                     // 干接点2状态
    quint16 usDO3State;                     // 干接点3状态
    quint16 usDO4State;                     // 干接点4状态

    quint16 usDO1Ctrl;                      // 干接点1控制
    quint16 usDO2Ctrl;                      // 干接点2控制
    quint16 usDO3Ctrl;                      // 干接点3控制
    quint16 usDO4Ctrl;                      // 干接点4控制

    quint16 usDCSideConfType;               // 直流侧汇入类型 0 - 并联汇入  1 - 各组独立  2 - 分支路汇入
    quint16 usMultiConfBankNum;             // 各支路组数
    quint16 usBranNum;                      // 支路数
    quint16 usBranCfgInfo[MAX_BANK_NUM];    // 支路1电池组配置信息
    float fBranCurBankLargeCur;             // 组大电流  异常电流检测
    float fBranCurBranchCur;                // 支路电流
    quint16 usBranCurDuration;              // 持续时间 秒
    quint16 usBranCurAbnoRecord[MAX_BANK_NUM]; // 组电流异常开始时间
    quint16 usBranCurAbnoYear[MAX_BANK_NUM];
    quint16 usBranCurAbnoMonth[MAX_BANK_NUM];
    quint16 usBranCurAbnoDay[MAX_BANK_NUM];
    quint16 usBranCurAbnoHour[MAX_BANK_NUM];
    quint16 usBranCurAbnoMin[MAX_BANK_NUM];
    quint16 usBranCurAbnoSec[MAX_BANK_NUM];

    quint16 usBankVolDiffCount[MAX_BANK_NUM]; // 支路组端电压差计数

    quint16 usEMSCommStrategy;              // EMS通讯策略 0 - Modbus TCP 1 - Xn104 2- Xn61850
    char    aIEDName[20];                   // IED 名称
    quint16	usPCSCommStrategy;              // PCS通讯策略 0 - 科工串口 1 - 科华串口 2 - 阳光串口 3 - 汇川串口 4 - 串口配置 11 - 科工Can 12 - 团标Can 21 - 南瑞网口 99 - 其他
    quint16	usPCSCommSerialPortNo;          // 串口号
    quint16 usPCSCommIP1;                   // PCS通讯IP1
    quint16 usPCSCommIP2;                   // PCS通讯IP2
    quint16 usPCSCommIP3;                   // PCS通讯IP3
    quint16 usPCSCommIP4;                   // PCS通讯IP4

    quint16 usRunMode;                      // 运行模式         0 - 就地   1 - 远程
    quint16 usCtrlLoopType;                 // 控制回路类型     0 - 总正   1 - 总正,总负  2 - 总正,总负,预充  3 - 无反馈  4 - 总正,预充
    quint16 usCtrlLoopCloseAct;             // 控制回路闭合方式 0 - 立刻闭合 1 - 确认后闭合(I类) 所有保护  2 - 确认后闭合(II类) 过压过流欠压
    float fBranVolDiff;                     // 支路电压差

    float fNominalCap;                      // 标称容量
    float fActualCap;                       // 实际容量(标定容量)
    float fRatedVol;                        // 平台电压

    float fSglTempRiseCheckVal;             // 单体电池温升快 5/1分钟
    float fPowerLineTempRiseCheckVal;       // 动力线温升快   5/1分钟

    float fSglVolSudChgUpLimitAlarm;          // 单体电压突变 告警值
    float fSglVolSudChgUpLimitAlarmHC;        // 单体电压突变 告警回差值
    float fSglVolSudChgUpLimitProt;           // 单体电压突变 保护值
    float fSglVolSudChgUpLimitProtHC;         // 单体电压突变 保护回差值
    float fResAbnormalChgVol;                 // 单体内阻异常,充电电压
    float fResAbnormalDchgVol;                // 单体内阻异常,放电电压
    float fPrechgAbnormalTime;                // 预充失败时间 分
    float fBankCurDiffWarn;                   // 组间环流过大预警
    float fBankCurDiffAlarm;                  // 组间环流过大告警
    float fBankCurDiffProt;                   // 组间环流过大保护

    quint16 usLang;                         // 语言        0 - 中文     1 - 英文         Misc.ini
    quint16 usLogo;                         // Logo        0 - 科工     1 - 中性(默认先从文件中加载)
    quint16 usDacAssStrategy;               // 辅助采集策略 0 - 禁用    1 - 与采集服务各自一半采集  101 - 采集服务采集组1,其余辅助采集  200 - 全由辅助采集
    quint16 usInsuResStrategy;              // 绝缘监测策略 0 - BC不带绝缘检测 1 - 开路检测  2 - 在线检测  3 - 先闭合组测试 101 ~ 164固定簇测试
    quint16 usPackPowerLineStrategy;        // Pack箱动力线策略 0 - 不采集   1 - (1#负极, N#正极)  2 - (N-1#正极, N#负极)   10 - (N#单极柱)
    quint16 usBankPowerLineStrategy;        // 组端动力线策略
    quint16 usLinkageStrategy;              // 联动跳机策略  保留
    quint16 usBeepStrategy;                 // 蜂鸣器策略  0 - 不启用 1 - 告警和保护蜂鸣  2 - 保护蜂鸣
    quint16 usNetworkNum;                   // 网卡数
    quint16 usFaultLampCtrlDONo;            // 故障灯控制  1 ~ 5, DO1 ~ DO5
    quint16 usRunLampCtrlDONo;              // 运行灯控制  1 ~ 5, DO1 ~ DO5
    quint16 usExtFaultLampCtrlDONo;         // 扩展故障灯控制   201 ~ 208 - 扩展IO
    quint16 usExtRunLampCtrlDONo;           // 扩展运行灯控制   201 ~ 208 - 扩展IO
    quint16 usConfSwitchOnCtrlDONo;         // 汇流开关合闸控制 201 ~ 208 - 扩展IO
    quint16 usConfSwitchOffCtrlDONo;        // 汇流开关分闸控制 201 ~ 208 - 扩展IO
    quint16 usEMSCommFaultDONo;             // EMS通讯故障      201 ~ 208 - 扩展IO

    quint16 usFanCtrlDONo;                  // 风机控制    1 ~ 5, DO1 ~ DO5
    quint16 usNeedBCInitMask;               // 是否需要等待BC初始完成后,发命令

    quint16 usForbidChgDchgSglNum;               // 禁充 禁放状态判断,单体个数
    float fForbidChgRlsEQ;                       // 禁充 状态释放所需放电量
    float fForbidDchgRlsEQ;                      // 禁放 状态释放所需充电量
    quint16 usForbidChgRlsSglVolUpWarnDiff;      // 组内单体最高降低至(上限预警 - 差值),可继续充电,释放禁充状态
    quint16 usForbidDchgRlsSglVolDownWarnDiff;   // 组内单体最低升高至(下限预警 + 差值),可继续放电,释放禁放状态

    quint16 usPCSDry1Strategy;              // PCS干接点策略 1 - BC 2- BA
    quint16 usPCSDry1Type;                  // 类型 0 - 未配置 1 - 告警 2 - 保护  3 - 禁充 4 - 禁放
    quint16 usPCSDry1DONo;                  // DO序号 6 或者 7
    quint16 usPCSDry1AlarmValue;            // 告警值
    quint16 usPCSDry2Strategy;              // PCS干接点策略 1 - BC 2- BA
    quint16 usPCSDry2Type;                  // 类型0 - 未配置 1 - 告警 2 - 保护  3 - 禁充 4 - 禁放
    quint16 usPCSDry2DONo;                  // DO序号
    quint16 usPCSDry2AlarmValue;            // 告警值

    quint16 usExtPCSDry1Type;               // 类型 0 - 未配置 1 - 告警 2 - 保护  3 - 禁充 4 - 禁放
    quint16 usExtPCSDry1DONo;               // DO序号 1 或者 2
    quint16 usExtPCSDry1AlarmValue;         // 告警值
    quint16 usExtPCSDry2Type;               // 类型 0 - 未配置 1 - 告警 2 - 保护  3 - 禁充 4 - 禁放
    quint16 usExtPCSDry2DONo;               // DO序号
    quint16 usExtPCSDry2AlarmValue;         // 告警值

    quint16 usSocCalibStrategy;             // Soc校准策略 1 - 启动 0 - 不启动
    quint16 usSocCalibActive;               // 1 - 激活  0 - 不激活
    float fSocCalibLowCur;                  // 小电流值
    quint16 usSocCalibDuration;             // 持续时间 30分
    quint16 usSocCoe;                       // Soc调整系数

    quint16 usBankSocStrategy;              // 组SOC策略    0 - 单体平均   1 - BA 线性处理SOC     2 - BC计算并上传    3 - SOC由BC计算,SOH由BA计算
    quint16 usSglTempStrategy;              // 单体温度策略 0 - 温度下限不参与 1 - 温度下限参与策略      XnProcSrv.ini
    quint16 usFaultStrategy;                // 故障策略 0 - 采集线故障、BCMU与BMU通讯故障不参与 BC与BA通讯故障跳机 温度采集线故障不跳机, 1 - 采集线故障、BCMU与BMU通讯故障 BC与BA通讯故障待机跳机 2 - BA与BC、BC与BMU通讯故障 持续5分钟后,PCS状态转化成 待机
    quint16 usAcquDataCrtStrategy;          // 采集数据调整策略
    quint16 usAlarmCacheStrategy;           // 告警缓存配置策略:0不缓冲告警;1缓冲告警;默认值为0.
    quint16 usChgDchgNumStrategy;           // 充放电次数计算策略 0 - 60% 算一次
    quint16 usEnvTempRefBankNo;             // 环境温度参考组号
    quint16 usShowWarn;                     // 显示预警
    quint16 usShowSglVolInvalidAlarm;       // 单体电压无效告警显示
    quint16 usRunStateMaintainTime;         // 运行状态维持时间
    quint16 usRunStateRecoveryTime;         // 运行状态恢复时间

    quint16 usSglTempDPStrategy;            // 单体温度数据处理
    quint16 usSglVolDPStrategy;             // 单体电压数据处理

    quint16 usDropPowerEnabled;             // 降功率
    float fDropPowerEndCur;                 // 降功率末端电流
    float fBankMaxChargePower;              // 每组最大值
    float fBankMaxDischargePower;			//参数界面
    float fBankMaxChargeCurrent;			//参数界面
    float fBankMaxDischargeCurrent;			//参数界面
    float fDropPowerRatio;                  // 降功率比例

    int iPreJCQDelay;                       // 预充时间(秒)

    quint16 usEquiEnabled;                  // 均衡开启使能
    quint16 usSohEnabled;                   // SOH 使能
    quint16 usCycleTimes;                   // 电池 到 SOH = 80% 的循环次数

    quint16 usIsolSwitchStrategy;           // 隔离开关策略 0 - 无隔离开关 1 - 每组BC(DI3)反馈 2 - 每组BC(DI4)反馈 101 ~ 104 BA4个DI汇总 200 - 3rd进程设定  隔离开关闭合,才能闭合接触器
    quint16 usIsolSwitchAggrState;          // 隔离开关汇总状态 0 - 断开  1 - 全部闭合

    quint16	usExIOCommSerialPortNo;         // 扩展IO模块通讯串口号

    quint16 usConfSwitchStrategy;           // 汇流开关策略    1 - BC 2- BA 3 - ExtIO
    quint16 usConfSwitchDINo;               // DI序号
    quint16 usConfSwitchAlarmValue;         // 告警值
    quint16 usLastConfSwitchState;          // 汇流开关汇上次状态       0 - 默认  1 - 闭合  2 - 断开
    quint16 usConfSwitchState;              // 汇流开关汇状态           0 - 默认  1 - 闭合  2 - 断开

    quint16 usEmerStopStrategy;             // 紧急停机策略     1 - BC 2- BA 3 - ExtIO
    quint16 usEmerStopDINo;                 // DI序号
    quint16 usEmerStopAlarmValue;           // 告警值
    quint16 usLastEmerStopState;            // 紧急停机上次状态         0 - 默认  1 - 告警  2 - 正常
    quint16 usEmerStopState;                // 紧急停机状态             0 - 默认  1 - 告警  2 - 正常

    quint16 usFireWarnStrategy;             // 消防预警策略     1 - BC 2- BA 3 - ExtIO
    quint16 usFireWarnDINo;                 // DI序号
    quint16 usFireWarnAlarmValue;           // 告警值

    quint16 usFireActionStrategy;           // 消防启动策略     1 - BC 2- BA 3 - ExtIO
    quint16 usFireActionDINo;               // DI序号
    quint16 usFireActionAlarmValue;         // 告警值

    quint16 usFireFaultStrategy;            // 消防故障策略     1 - BC 2- BA 3 - ExtIO
    quint16 usFireFaultDINo;                // DI序号
    quint16 usFireFaultAlarmValue;          // 告警值

    quint16 usWaterStrategy;                // 水浸告警策略     1 - BC 2- BA 3 - ExtIO
    quint16 usWaterDINo;                    // DI序号
    quint16 usWaterAlarmValue;              // 告警值

    quint16 usGasStrategy;                  // 可燃气体策略     1 - BC 2- BA 3 - ExtIO
    quint16 usGasDINo;                      // DI序号
    quint16 usGasAlarmValue;                // 告警值

    quint16 usAcceCtrlStrategy;             // 门禁状态策略     1 - BC 2- BA 3 - ExtIO
    quint16 usAcceCtrlDINo;                 // DI序号
    quint16 usAcceCtrlAlarmValue;           // 告警值

    quint16 usCustom1Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO
    quint16 usCustom1DINo;                  // 自定义DI序号
    quint16 usCustom1AlarmValue;            // 自定义告警值

    quint16 usCustom2Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO
    quint16 usCustom2DINo;                  // 自定义DI序号
    quint16 usCustom2AlarmValue;            // 自定义告警值

    quint16 usCustom3Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO
    quint16 usCustom3DINo;                  // 自定义DI序号
    quint16 usCustom3AlarmValue;            // 自定义告警值

    quint16 usCustom4Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO
    quint16 usCustom4DINo;                  // 自定义DI序号
    quint16 usCustom4AlarmValue;            // 自定义告警值

    quint16 usCustom5Strategy;              // 自定义策略     1 - BC 2- BA 3 - ExtIO
    quint16 usCustom5DINo;                  // 自定义DI序号
    quint16 usCustom5AlarmValue;            // 自定义告警值

    quint16 usBaIOStrategy;                 // BA IO采集策略 0 - 不采集 1 - 采集
    quint16 usPosFuseStrategy;              // 正极熔断器策略   0 - 无熔丝 [1 - 每组BC(DI4)反馈 常开] [11 - 每组BC(DI4)反馈 常闭] 999 - 接BA DI3(常闭)
    quint16 usNegFuseStrategy;              // 负极熔断器策略   0 - 无熔丝 [1 - 每组BC(DI5)反馈 常开] [11 - 每组BC(DI5)反馈 常闭] 999 - 接BA DI4(常闭)
    quint16 usBmuDIStrategy;                // BMU DI     0 - 正常   1 - 风机反馈
    quint16 usCellDataStrategy;             // 单体数据显示策略 0 - 全部显示 1 - 隐藏单体SOC/SOH
    quint16 usBMUUpgradeStrategy;           // BMU升级策略      0 - BC模式   1 - BC备份

    //	quint16 usLastLinkageCtrl;              // 上次联动跳机控制
    //	quint16 usLinkageTripState;             // 联动跳机模式状态   0 - 正常  1 - 触发联动跳机 2 - 联动跳机恢复(前提需要Ctrl状态为2)
    //	quint16 usLinkageTripCtrl;              // 联动跳机模式控制   0 - 正常  1 - 联动跳机     2 - 不接受控制 由State = 1 转来  3 - 恢复接受控制 由State = 2 转来

    quint16 usTimeServerEnable;         //对时服务使能:0禁用,1启用,默认为0
    quint16 usTimeSrvIP1;                   // 对时服务IP1
    quint16 usTimeSrvIP2;                   // 对时服务IP2
    quint16 usTimeSrvIP3;                   // 对时服务IP3
    quint16 usTimeSrvIP4;                   // 对时服务IP4
    quint16 usTimeSrvPort;                  // 对时服务端口
    quint16 usCmdSrvIP1;                    // 命令服务IP1
    quint16 usCmdSrvIP2;                    // 命令服务IP2
    quint16 usCmdSrvIP3;                    // 命令服务IP3
    quint16 usCmdSrvIP4;                    // 命令服务IP4
    quint16 usCmdSrvPort;                   // 命令服务端口
    quint16 usDataSrvIP1;                   // 数据服务IP1
    quint16 usDataSrvIP2;                   // 数据服务IP2
    quint16 usDataSrvIP3;                   // 数据服务IP3
    quint16 usDataSrvIP4;                   // 数据服务IP4
    quint16 usDataSrvPort;                  // 数据服务端口

    quint16 usUDiskNotify;                  // U盘通知 0 - 无保存  1 - U盘保存  2 - U盘故障  3 - SD保存 4 - SD故障
    quint16 usUDiskCtrl;                    // U盘控制 1 - 拔出U盘
    quint16 usDataSavePeriod;               // 数据保存周期(秒)

    quint16 usInsuResTestBankIndex;         // 绝缘检测序号 + 100 等待绝缘检测结束

    quint16 usDacSrvNum;                    // 采集服务采集组数
    quint16 usDacAssNum;                    // 采集辅助采集组数
    quint16 usDacAssSyn;                    // 采集辅助时序同步 1 = 需要同步需等待(上电闭合)
    quint16 usForceMode;                    // 1 - 进入强制模式(强制闭合接触器,发PCS为正常)     0 - 正常模式
    quint16 usCalibMode;                    // 0 - 正常模式  1 - 进入标定模式  2 - 结束标定
    quint16 usEmerMode;                     // 0 - 正常模式  1 - 进入应急模式
    quint16 usDebugMode;                    // 0 - 正常模式  1 - 进入调试模式
    quint16 usTranMode;                     // 0 - 正常模式  1 - 进入转发模式
    quint16 usDlyBfCutCntorModifyCount;     // 断开接触器前延时时间修改计数 > 0 修改过,同步到ini = 0

    quint16 usUpgradeMode;                  // BCMU、BMU升级模式 1 - BC升级  2 - BMU升级 +100 强制中断(通知xndacsrv进行初始化) 199 - 超时
    quint16 usUpgradeAddr;                  // 升级地址
    quint16 usUpgradeBCMUAddr;              // BCMU 地址(升级BMU时用)
    quint16 usUpgradeExeResult;             // 执行结果 0  - 正在执行 1 - 成功  2 - 失败  xndacsrv 赋值 +100 强制中断(xnview)
    quint16 usUpgradeExeErrCode;            // 执行错误码

    quint16 usMstUpgradeMode;               // BA管家升级模式    1 -  BC升级  2 - BMU升级  +100 强制中断 (xnmstsrv写入)  11 -  以BC方式升级BMU
    quint16 usMstLastUpgradeMode;           // 上次值记录(xnview)
    quint16 usMstUpgradeBCMUAddr;           // BCMU 地址(xnmstsrv)
    quint16 usMstUpgradeExeResult;          // 执行结果     0  - 正在执行    1 - 成功     2 - 失败    3 - 超时   4 - 用户强制停止 (xnview 写入)

    quint16 usEMSContModifyCount;           // EMS 控制接触器计数
    quint16 usEMSConfModifyCount;           // EMS 控制汇流开关计数
    quint16 usEMSFaultClearModifyCount;     // EMS 故障清除计数
    quint16 usEMSNotifyUpgradeModifyCount;  // EMS 通知升级计数
    quint16 usStackTempParamModifyCount;    // 堆临时参数修改 计数

    float fStackTempParam[50];              // 临时参数 数据库加载

    // 保持寄存器
    quint16 usDelayBeforeCutCntor;           // 断开接触器前延时时间	 1
    quint16 usYear;                          // 年	                     2
    quint16 usMonth;                         // 月	                     3
    quint16 usDay;                           // 日	                     4
    quint16 usHour;                          // 时	                     5
    quint16 usMin;                           // 分	                     6
    quint16 usSec;                           // 秒	                     7
    quint16 usConfirmDt;                     // 设置日期确认	         8
    quint16 usEMSContCtrl;                   // 堆接触器管理	         9
    quint16 usEMSConfCtrl;                   // 汇流开关管理	         10
    quint16 usEMSFaultClear;                 // 故障清除	             11
    quint16 usFtpIP1;                        // FTP服务端IP1	         12
    quint16 usFtpIP2;                        // FTP服务端IP2	         13
    quint16 usFtpIP3;                        // FTP服务端IP3	         14
    quint16 usFtpIP4;                        // FTP服务端IP4	         15
    quint16 usEMSNotifyUpgrade;              // EMS通知升级              16

    quint16 usStackHoldTemp[50];             // 30 - 79

    // 告警
    SAlarm stackAlarm[10];                   // 电池堆告警
    //防逆流ReverseFlow
    quint16 usReverseFlowEnable;        //防逆流使能:0禁用,1启用,默认为0
    quint16 usReverseFlowMeterNo;       //防逆流表号,值范围为1到MAX_METER_NUM,默认为2(防逆流使能为1时有效)
    float fReverseFlowDiff;             //防逆流回差,值默认为0.0(防逆流使能为1时有效)
    //需量Demand
    quint16 usDemandEnable;             //需量使能:0禁用,1启用,默认为0
    float fDemandDiff;                  //需量回差,值默认为0.0(需量使能为1时有效)
    float fDemandMonth[12];             //每月需量,值默认为0.0(需量使能为1时有效)
    quint16 usCurrentUserType;          //界面当前用户类型:0访客,1操作员,2工程师,默认为0
    quint16 usDevScreenType;            //硬件设备屏类型：0老七寸屏,1十寸屏,2新七寸屏,3CCU外接屏,默认为1
};

#endif //BATT_STACK_H
